package com.xinchao.dao;

import com.github.pagehelper.Page;
import com.xinchao.model.Role;
import com.xinchao.model.vo.RoleListVO;
import com.xinchao.model.vo.RoleSelectListVO;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface RoleMapper {
	/**
	 * 保存角色
	 *
	 * @param role Role
	 * @return long(主键)
	 */
	void insertRole(Role role);

	/**
	 * 保存角色模块关系
	 */
	void insertRoleModule(@Param("roleId") Long roleId, @Param("moduleIdArray") String[] moduleIdArray);

	/**
	 * 修改角色
	 *
	 * @param role Role
	 */
	void updateRoleById(Role role);

	/**
	 * 根据角色名称获取角色
	 *
	 * @param roleName    角色名称
	 * @return Role(角色)
	 */
	Role getRoleByRoleName(@Param("roleName") String roleName, @Param("status") Integer status);

	/**
	 * 通过角色ID删除角色模块关系
	 *
	 * @param roleId 角色ID
	 */
	void deleteRoleModuleByRoleId(Long roleId);

	/**
	 * 获取角色列表
	 *
	 * @param status      状态
	 * @param roleName    角色名称
	 * @return Page<RoleListDTO>
	 */
	Page<RoleListVO> listRole(@Param("status") Integer status, @Param("roleName") String roleName);

	/**
	 * 获取所有角色列表
	 *
	 * @return List<RoleSelectListVO>
	 */
	List<RoleSelectListVO> listRoleSelect(@Param("status") Integer status);

	/**
	 * 获取角色拥有的权限名称
	 *
	 * @param roleId 角色ID
	 * @return List<String>
	 */
	List<String> listModuleNamesByRoleId(Long roleId);

	/**
	 * 根据角色Id获取拥有的权限Id
	 * @param roleId
	 * @return
	 */
    List<String> listModuleIdsByRoleId(@Param("roleId") Long roleId);

	/**
	 * 启用禁用角色
	 * @param roleId 角色ID
	 * @param status 状态
	 * @param status 状态
	 */
	void enableDisableRole(@Param("roleId") Long roleId, @Param("status") Integer status);

	/**
	 * 根据角色id获取角色
	 *
	 * @param roleId 角色ID
	 * @return Role(角色)
	 */
	Role getRoleByRoleId(Long roleId);
}